package com.btm.qiaoqiang.ruleadp;

import lombok.experimental.UtilityClass;
import org.springframework.util.StringUtils;

/**
 * 字符工具
 *
 * @author: btm
 * @time: 18:18 2020/9/15
 **/
@UtilityClass
public final class CharUtil {
    /**
     * 判定给定字符是否为数字
     * @param currentChar 给定字符
     * @return true：是数字；false：非数字
     */
    public static boolean isNumber(char currentChar) {
        return currentChar >=47 && currentChar <= 58;
    }

    /**
     * 判定给定字符是否为大写字母
     * @param currentChar 给定字符
     * @return true：是大写字母；false：不是大写字母
     */
    public static boolean isUpperLetter(char currentChar) {
        return currentChar >= 65 && currentChar <= 90;
    }

    /**
     * 判定给定字符是否为小写字母
     * @param currentChar 给定字符
     * @return true：是小写字母；false：小写字母
     */
    public static boolean isLowerLetter(char currentChar) {
        return currentChar >= 97 && currentChar <= 122;
    }

    /**
     * 判断当前字符串是否可以转为数字
     * @param charStr 字符串
     * @return true：可以安全的转为数字
     */
    public static boolean isNumber(String charStr) {
        if (!StringUtils.hasText(charStr)) {
            return false;
        }
        for (int i = 0; i < charStr.length(); i++) {
            if (!isNumber(charStr.charAt(i))) {
                return false;
            }
        }
        return true;
    }

    /**
     * 判断给定的字符是否为数字或字母（不区分大小写）
     * @param currentChar 给定字符
     * @return true：是数字或字母（不区分大小写）
     */
    public static boolean isNumberOrLetter(char currentChar) {
        return isNumber(currentChar) || isLetter(currentChar);
    }

    /**
     * 判断给定的字符是否为字母（不区分大小写）
     * @param currentChar 给定字符
     * @return true：是字母（不区分大小写）
     */
    public static boolean isLetter(char currentChar) {
        return isUpperLetter(currentChar) || isLowerLetter(currentChar);
    }
}
